package strategy1;

import java.util.Date;

// 2. 抽象策略类
public abstract class AbstractTaskGenerator {
    // 获取任务类型
    abstract TaskType getTaskType();

    // 计算执行时间（抽象方法）
    abstract Date calculateExecuteTime(TaskContext context);

    // 生成任务的通用逻辑
    public boolean generateTask(TaskContext context) {
        System.out.println("开始生成[" + getTaskType().getDesc() + "]任务");

        // 校验数据
        if (!validateData(context)) {
            System.out.println("数据校验失败，取消任务生成");
            return false;
        }

        // 计算执行时间
        Date executeTime = calculateExecuteTime(context);
        if (executeTime == null) {
            System.out.println("执行时间计算失败，取消任务生成");
            return false;
        }

        // 创建任务
        createTask(context, executeTime);
        System.out.println("任务创建成功");
        return true;
    }

    // 数据校验（可被子类重写）
    boolean validateData(TaskContext context) {
        return context.getPatientId() != null;
    }

    // 创建任务
    private void createTask(TaskContext context, Date executeTime) {
        System.out.println("创建任务 - 患者ID: " + context.getPatientId() +
                ", 执行时间: " + executeTime +
                ", 任务类型: " + getTaskType().getDesc());
    }
}









